function model_compare(name_of_datasets, data, ratio, node_begin, node_end, node_interval, node_train_number)
    % 任务类型说明
    REGRESSION=0;
    CLASSIFIER=1;
    
    % 公共参数定义
    node_range = node_begin:node_interval:node_end;
    num_models = 3;  % 模型数量
    
    % 模型配置信息
    % model_names = {'QRILSM','ILSM','OrILSM'};
    model_names = {'GSCN', 'MELM', 'ELM'};
    model_colors = {'r', 'b', 'c'};
    scaling_flags = [true, true, true];  % 标记是否需要数据缩放
  
    % MY_CDDM_ELM专用参数
    num_neighbor = 20;
    num_attain_node = 10;
    num_pool = 40;
    NO_pool_sample = 6;
    num_bins = 40;

    % GSCN专用参数
    Lambdas = 200:1:250;

    % 主循环：遍历所有模型
    for model_idx = 1:num_models
        tic;
        % 初始化结果存储数组
        [training_time, testing_time, training_accuracy, testing_accuracy] = ...
            deal(zeros(length(node_range), node_train_number));
        
        % 遍历节点范围
        for i = 1:length(node_range)
            num_nodes = node_range(i);
            
            % 遍历训练次数
            for j = 1:node_train_number
                % 数据分割
                if model_idx == 1
                    [data_train, data_test] = split_out(data, ratio);
                else
                    [data_train, data_test] = holdoutSplit(data, ratio);
                end
                
                % 数据缩放处理
                if scaling_flags(model_idx)
                    [max_col, min_col, mean_col, data_train(:,2:end)] = average_scale(data_train(:,2:end));
                    data_test(:,2:end) = (data_test(:,2:end) - mean_col) ./ (max_col - min_col);
                end
                %0 表示使用库函数进行逆运算的求解
                %1 表示使用自己定义的求解函数进行逆运算的求解
                %2 表示使用直接最小二乘迭代的求解函数进行逆运算的求解
                %3 表示使用正交化后最小二乘迭代的求解函数进行逆运算的求解
                % 调用不同模型的训练函数
                % 调用不同模型的训练函数
                switch model_names{model_idx}
                    case 'GSCN'
                        % 1 是使用库函数进行全量求逆
                        % 2 是使用低秩估计进行求逆
                        % 3 是使用我写的求逆函数进行求逆
                        mode = 3;
                        [TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy] = ...
                            GSCN_model(data_train, data_test, num_nodes, Lambdas,mode);

                    case 'MELM'
                        %0 表示使用库函数进行逆运算的求解
                        %1 表示使用自己定义的求解函数进行逆运算的求解
                        Solver_flag = 0;
                        melm_obj = MELM_model(CLASSIFIER, num_nodes, 'sigmoid', 10^100,Solver_flag);
                        melm_obj.train(data_train);
                        melm_obj.test(data_test);
                        % 获得结果
                        TrainingTime = melm_obj.TrainingTime;
                        TestingTime = melm_obj.TestingTime;
                        TrainingAccuracy = melm_obj.TrainingAccuracy;  % RMSE for regression
                        TestingAccuracy = melm_obj.TestingAccuracy;    % RMSE for regression

                    case 'ELM'
                        %0 表示使用库函数进行逆运算的求解
                        %1 表示使用自己定义的求解函数进行逆运算的求解
                        Solver_flag = 0;
                        elm_obj = ELM_model(CLASSIFIER, num_nodes, 'sigmoid', 0.01,Solver_flag);
                        elm_obj.train(data_train);
                        elm_obj.test(data_test);
                        % 获得结果
                        TrainingTime = elm_obj.TrainingTime;
                        TestingTime = elm_obj.TestingTime;
                        TrainingAccuracy = elm_obj.TrainingAccuracy;  % RMSE for regression
                        TestingAccuracy = elm_obj.TestingAccuracy;    % RMSE for regression

                end
                % 存储结果
                training_time(i, j) = TrainingTime;
                testing_time(i, j) = TestingTime;
                training_accuracy(i, j) = TrainingAccuracy;
                testing_accuracy(i, j) = TestingAccuracy;
            end
        end

        % 计算并显示耗时，绘制结果
        elapsed_time = toc;
        plot_result(model_names{model_idx}, model_colors{model_idx}, ...
            training_time, testing_time, training_accuracy, testing_accuracy, ...
            node_range, name_of_datasets, elapsed_time);
        hold on;
    end
end